﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using MySql.Data.MySqlClient;
using Bamuca.Codigo.DTO;
using System.Data;

namespace Bamuca.Codigo.DAO
{
    public class UsuarioDao
    {
        MySqlConnection conn = ConexaoDao.SqlConectar();
        MySqlCommand cmd = new MySqlCommand();

        public void Inserir(UsuarioDto _usuarioDto)
        {
            try
            {
                MySqlConnection conn = ConexaoDao.SqlConectar();
                MySqlCommand cmd = new MySqlCommand();

                cmd.Connection = conn;
                cmd.CommandText = "insert into usuarios (nome, cargo, login, senha, status, novasenha)" +
                                  "values (@nome, @cargo, @log, @senha, @status, @novasenha)";
                cmd.Parameters.AddWithValue("@nome", _usuarioDto.Nome );
                cmd.Parameters.AddWithValue("@cargo", _usuarioDto.Cargo );
                cmd.Parameters.AddWithValue("@log", _usuarioDto.Login );
                cmd.Parameters.AddWithValue("@senha", _usuarioDto.Senha );
                cmd.Parameters.AddWithValue("@status", _usuarioDto.StatusInt);
                cmd.Parameters.AddWithValue("@novasenha", _usuarioDto.NovaSenhaInt );
                cmd.ExecuteNonQuery();
            }
            catch (MySqlException ex)
            {
                throw ex;
            }
            finally
            {
                conn.Close();
            }
        }

        public void Alterar(UsuarioDto _usuarioDto)
        {
            try
            {
                cmd.Connection = conn;
                cmd.CommandText = "UPDATE usuarios SET (nome = @nome, " +
                                   "cargo = @cargo, " +
                                   "login = @login, " +
                                   "senha = @senha, " +
                                   "status = @status, " +
                                   "novasenha = @novasenha)" +
                                   "WHERE idusuario = @id";

                cmd.Parameters.AddWithValue("@nome", _usuarioDto.Nome);
                cmd.Parameters.AddWithValue("@cargo", _usuarioDto.Cargo);
                cmd.Parameters.AddWithValue("@login", _usuarioDto.Login);
                cmd.Parameters.AddWithValue("@senha", _usuarioDto.Senha);
                cmd.Parameters.AddWithValue("@status", _usuarioDto.StatusInt);
                cmd.Parameters.AddWithValue("@novasenha", _usuarioDto.NovaSenhaInt );
                cmd.Parameters.AddWithValue("@id", _usuarioDto.IdUsuario );

                cmd.ExecuteNonQuery();
            }
            catch (MySqlException ex)
            {
                throw ex;
            }

        }

        public void Excluir(UsuarioDto _usuarioDto)
        {
            try
            {
                cmd.Connection = conn;
                cmd.CommandText = "delete usuarios WHERE idusuario = @id";
                cmd.Parameters.AddWithValue("@id", _usuarioDto.IdUsuario  );
                cmd.ExecuteNonQuery();
            }
            catch (MySqlException ex)
            {
                throw ex;
            }

        }

        public DataTable ConsultarTodosPorParametro(UsuarioDto _usuarioDto)
        {
            MySqlDataAdapter dtAdap;
            DataTable dtTable = new DataTable();

            string _strSql = "SELECT idusuario AS Id, Nome, IF(status = 1, 'Ativo', 'Inativo') AS Status FROM usuarios WHERE 1=1 ";
            if (_usuarioDto.IdUsuario > 0)
            {
                _strSql = _strSql + "AND idusuario = " + _usuarioDto.IdUsuario + " ";
            }
            if (_usuarioDto.Nome != null)
            {
                _strSql = _strSql + "AND nome LIKE '%" + _usuarioDto.Nome + "%' ";
            }
            if (_usuarioDto.StatusInt != 2)
            {
                if (_usuarioDto.Status) { _strSql = _strSql + "AND status = 1 ";}
                else { _strSql = _strSql + "AND status = 0 "; }
            }
            try
            {
                dtAdap = new MySqlDataAdapter(_strSql, conn);
                dtAdap.Fill(dtTable);
            }
            catch (MySqlException ex)
            {
                throw ex;
            }
            finally
            {
                conn.Close();
            }

            return dtTable;
        }

        public UsuarioDto  ConsultarUmPorParametro(UsuarioDto _usuarioDto)
        {
            MySqlDataReader dr;
            UsuarioDto _usuario= new UsuarioDto();
           
            string _strSql = "SELECT * FROM usuarios WHERE 1=1 ";
            
            if (_usuarioDto.IdUsuario > 0)
            {
                _strSql = _strSql + "AND idusuario = " + _usuarioDto.IdUsuario + " ";
            }
            
            if (_usuarioDto.Nome != string.Empty)
            {
                _strSql = _strSql + "AND nome LIKE '%" + _usuarioDto.Nome + "'% ";
            }
            
            if (_usuarioDto.Status != null)
            {
                if (_usuarioDto.Status) { _strSql = _strSql + "AND status = 1 "; }
                else { _strSql = _strSql + "AND status = 0 "; }
            }

            if (_usuarioDto.Login  != string.Empty )
            {
                _strSql = _strSql + "AND login = '" + _usuarioDto.Login  + "' ";
            }

            if (_usuarioDto.Senha != string.Empty )
            {
                _strSql = _strSql + "AND senha = '" + _usuarioDto.Senha  + "' ";
            }

            try
            {
                cmd.Connection = conn;
                cmd.CommandText = _strSql;
                dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);

                while (dr.Read())
                {
                    _usuario.IdUsuario  = Convert.ToInt32(dr["idusuario"]);
                    _usuario.Nome = dr["nome"].ToString();
                    _usuario.Cargo = dr["cargo"].ToString();
                    _usuario.Login = dr["login"].ToString();
                    _usuario.Senha = dr["senha"].ToString();
                    _usuario.StatusInt = Convert.ToInt32(dr["status"]);
                    _usuario.NovaSenhaInt = Convert.ToInt32(dr["novasenha"]);
                }

            }
            catch (MySqlException ex)
            {
                throw ex;
            }
            finally
            {
                conn.Close();
            }

            return _usuario;
        }

        public Boolean LoginJaExiste(string _login, int _id = 0)
        {
            MySqlConnection conn = ConexaoDao.SqlConectar();
            MySqlCommand cmd = new MySqlCommand();
            Boolean _retorno = false;
            MySqlDataReader dr;
            string _strSql;

            if (_id != 0)                
            {
                _strSql = "SELECT COUNT(idusuario) AS qtd FROM usuarios WHERE login = @login AND idusuario <> @id ";
                cmd.Parameters.AddWithValue("@login", _login);
                cmd.Parameters.AddWithValue("@id", _id);
            }
            else
            {
                _strSql = "SELECT COUNT(idusuario) AS qtd FROM usuarios WHERE login = @login ";
                cmd.Parameters.AddWithValue("@login", _login );
            }

            try
            {
                if (_login != string.Empty)
                {
                    cmd.Connection = conn;
                    cmd.CommandText = _strSql;
                    dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                    if (dr.Read())
                    {
                        if (Convert.ToInt32(dr["qtd"]) > 0)
                        {
                            _retorno = true;
                        }
                    }
                }

            }
            catch (MySqlException ex)
            {
                throw ex;
            }
            finally
            {
                conn.Close();
            }

            return _retorno;
        }

        /// <summary>
        /// Verificação de login do usuario.
        /// </summary>
        /// <param name="_login"></param>
        /// <param name="_senha"></param>
        /// <returns></returns>
        public Boolean Logar(string _login, string _senha)
        {
            MySqlConnection conn = ConexaoDao.SqlConectar();
            MySqlCommand cmd = new MySqlCommand();
            Boolean _retorno = false;
            MySqlDataReader dr;

            string _strSql;

            _strSql = "SELECT idusuario AS ID, login, nome FROM usuarios WHERE login = @login AND senha = @senha ";
            cmd.Parameters.AddWithValue("@login", _login);
            cmd.Parameters.AddWithValue("@senha", _senha);

            try
            {
                 cmd.Connection = conn;
                 cmd.CommandText = _strSql;
                 dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
                 if (dr.Read())
                    {
                        _retorno = true;
                        SessaoDto.IdUsuario = (int)dr["ID"];
                        SessaoDto.Login = (string)dr["login"];
                        SessaoDto.Nome = (string)dr["nome"];
                    }               
                }

            catch (MySqlException ex)
            {
                throw ex;
            }
            finally
            {
                conn.Close();
            }

            return _retorno;
        }
    }
}